package com.cms.recursoshumanos.activity.ocio.reservacion;

import java.util.Calendar;
import java.util.Date;

import com.example.frontendrecursoshumanos.R;
import com.cms.recursoshumanos.activity.main.MainRecursosHumanosActivity;
import com.cms.recursoshumanos.cache.ListaOcioCache;
import com.cms.recursoshumanos.cache.UserInfoCache;
import com.cms.recursoshumanos.component.dialog.CustomDatePickerDialog;
import com.cms.recursoshumanos.component.dialog.CustomTimePickerDialog;
import com.cms.recursoshumanos.component.dialog.CustomDatePickerDialog.DateDialogListener;
import com.cms.recursoshumanos.component.dialog.CustomTimePickerDialog.TimeDialogListener;
import com.cms.recursoshumanos.constant.Constant;
import com.cms.recursoshumanos.handler.SetReservacionesOcioActivityHandler;
import com.cms.recursoshumanos.object.Ocio;
import com.cms.recursoshumanos.object.Usuario;
import com.cms.recursoshumanos.object.list.ListaOcio;
import com.cms.recursoshumanos.utilities.Tool;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public class SetReservacionActivity extends MainRecursosHumanosActivity 
{
	private Spinner spinnerEstablecimiento;
	private TextView fechaReservacion;
	private TextView horaInicReservacion;
	private EditText descripcionReservacion;
	private ProgressDialog dialog;
	private SetReservacionAsync setReservacionAsyncTask;
	
	private Date fecha_seleccionada;
	private Date hora_inic_seleccionada;
	private Usuario elUsuario;
	private ListaOcio listado;
	private Ocio elOcio;
	private Date min_value_date;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) 
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_set_reservacion);
		setupUI(findViewById(R.id.parent_layout));
		elUsuario = UserInfoCache.getInstance().getUsuario();
		listado = ListaOcioCache.getInstance().getListaOcio();
		
		Calendar c_hoy = Calendar.getInstance();
		
		min_value_date = c_hoy.getTime();
		
		int id_ocio;
		
		try
		{
			Bundle bundle = getIntent().getExtras();
			id_ocio = Integer.parseInt(bundle.getString("id_ocio"));
			elOcio = ListaOcioCache.getInstance().getListaOcio().getOcioById(id_ocio);
		}
		catch (Exception ee)
		{
			elOcio = ListaOcioCache.getInstance().getListaOcio().getOcioAtIndex(0);
		}
		
		setComponents();
	}
	protected void onResume() 
	{
		super.onResume();
		if (elUsuario == null)
		{
			elUsuario = UserInfoCache.getInstance().getUsuario();
		}
		if (listado == null)
		{
			goPaginaPrincipal(SetReservacionActivity.this);
		}
	}

	
	public void setComponents()
	{
		LinearLayout layout_info_general = (LinearLayout) findViewById(R.id.llInformacionGeneralSetReservacion);
		
		spinnerEstablecimiento = (Spinner) layout_info_general.findViewById(R.id.spValueNombreEstablecimiento);
		fechaReservacion = (TextView) layout_info_general.findViewById(R.id.tvValueFechaReservacion);
		horaInicReservacion = (TextView) layout_info_general.findViewById(R.id.tvValueHoraInicReservacion);
		descripcionReservacion = (EditText) layout_info_general.findViewById(R.id.etValueDescripcionReservacion);
		
		
		ArrayAdapter <String> adapter = new ArrayAdapter <String>(this,
		        android.R.layout.simple_spinner_item, 
		        listado.getListaOcioForSpinner());
		spinnerEstablecimiento.setAdapter(adapter);
		spinnerEstablecimiento.setSelection(ListaOcioCache.getInstance().getListaOcio().getIndexOcio(elOcio));
		
		fecha_seleccionada = Calendar.getInstance().getTime();
		hora_inic_seleccionada = fecha_seleccionada;
		
		fechaReservacion.setText(Tool.getInstance().parseDateToString(fecha_seleccionada, 6));
		horaInicReservacion.setText(Tool.getInstance().parseDateToString(hora_inic_seleccionada,4));
		
	}
	public static void hideSoftKeyboard(MainRecursosHumanosActivity activity) 
	{
	    InputMethodManager inputMethodManager = (InputMethodManager)  activity.getSystemService(MainRecursosHumanosActivity.INPUT_METHOD_SERVICE);
	    inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
	}
	public void setupUI(View view) 
	{

	    //Set up touch listener for non-text box views to hide keyboard.
	    if(!(view instanceof EditText))
	    {

	    	view.setOnTouchListener(new OnTouchListener() 
	    	{
	    		
	    		@Override
	            public boolean onTouch(View v, MotionEvent event) 
	    		{
	                hideSoftKeyboard(SetReservacionActivity.this);
	                return false;
	            }



	        });
	        
	        if (view instanceof android.view.ViewGroup) 
	        {

	            for (int i = 0; i < ((android.view.ViewGroup) view).getChildCount(); i++) 
	            {

	                View innerView = ((android.view.ViewGroup) view).getChildAt(i);

	                setupUI(innerView);
	            }
	        }
	    }

	}

	public void ShowDialogAlert(String mensaje)
	{
		AlertDialog.Builder builder1 = new AlertDialog.Builder(this);
        builder1.setMessage(mensaje);
        builder1.setCancelable(true);
        builder1.setPositiveButton("OK",
                new DialogInterface.OnClickListener() 
        		{
		            public void onClick(DialogInterface dialog, int id) 
		            {
		                dialog.cancel();
		            }
        		});
        

        AlertDialog alert11 = builder1.create();
        alert11.show();
	}
	
	public boolean validar_fecha()
	{
		Calendar cal = Calendar.getInstance();
		Date fecha_hoy = Tool.getInstance().getFechaFormato(cal.get(Calendar.DAY_OF_MONTH), cal.get(Calendar.MONTH), cal.get(Calendar.YEAR));	
		if ( fecha_hoy.getTime() > fecha_seleccionada.getTime())
		{
			
			return false;
		}
		else
		{
			return true;
		}
	}
	public boolean verificar_datos()
	{
		
		if (!validar_fecha())
		{
			ShowDialogAlert("La fecha seleccionda debe ser igual o superior al dia de hoy");
			return false;
		}
		return true;
	}
	
	public void onSpinnerFechaResClick(View v)
	{
		CustomDatePickerDialog mSpinnerDialog = new CustomDatePickerDialog(this, fecha_seleccionada,min_value_date,new DateDialogListener() 
		{
			  public void cancelled() 
			  {
			    // do your code here
			  }
			  public void ready(Date fecha_selec) 
			  {
				  fecha_seleccionada = fecha_selec;
				  fechaReservacion.setText(Tool.getInstance().parseDateToString(fecha_selec, 6));
			  }
			});
		mSpinnerDialog.show();
	}
	
	public void onSpinnerHoraInicClick(View v)
	{
		CustomTimePickerDialog mSpinnerDialog = new CustomTimePickerDialog(this, hora_inic_seleccionada,"Seleccione la Hora de Inicio",new TimeDialogListener() {
			  public void cancelled() 
			  {
			    // do your code here
			  }
			  public void ready(Date hora_selec) 
			  {
				  hora_inic_seleccionada = hora_selec;
				  horaInicReservacion.setText(Tool.getInstance().parseDateToString(hora_selec, 4));
			  }
			});
		mSpinnerDialog.show();
	}
	
	public void onEnviarSolicitudClick(View v)
	{
		
		setReservacionAsyncTask = new SetReservacionAsync(elUsuario);
		setReservacionAsyncTask.execute();
		
	}

	private class SetReservacionAsync extends AsyncTask<String, Void, String>
	{
		private Usuario elUsuario;
		
		public  SetReservacionAsync(Usuario elUsuario)
	    {
			this.elUsuario = elUsuario;
	    }
		
		@SuppressWarnings("deprecation")
		@Override
		protected void onPreExecute()
		{
			showDialog(0);
			dialog = ProgressDialog.show(SetReservacionActivity.this, "Espere","Procesando la Solicitud...",true );
		}
	
		@Override
		protected String doInBackground(String... arg0) 
		{
			SetReservacionesOcioActivityHandler handler = new SetReservacionesOcioActivityHandler();
			String result = handler.AddReservacionesOcio(this.elUsuario.getNombre_Usuario(), 
															this.elUsuario.getPassword(),
															descripcionReservacion.getText().toString(),
															ListaOcioCache.getInstance().
															getListaOcio().
															getOcioAtIndex(spinnerEstablecimiento.
																				getSelectedItemPosition()),
															fecha_seleccionada,
															hora_inic_seleccionada);
			return result;
		}
		
		@Override
		public void onPostExecute(String  result)
		{
			
			String str_result = result;
			
			if (str_result.equals(Constant.CODE_OK))
			{ 
				Toast.makeText(getAppContext(), "Se ha completado el proceso satisfactoriamente, verificar su correo", Toast.LENGTH_LONG).show();
			}
			else 
			{
				Tool.getInstance().showMessage(str_result);
			}
			dialog.cancel();
			this.cancel(true);
			
			
		}
		
	}
	
}
